classDiagram
    class Command {
        +execute(): void
    }
    
    class Invoker {
        +setCommand(command: Command): void
        +invoke(): void
    }
    
    class Receiver {
        +action(): void
    }
    
    class ConcreteCommand {
        +receiver: Receiver
        +execute(): void
    }

    Command <|-- ConcreteCommand
    ConcreteCommand --> Receiver : has a
    Invoker --> Command : uses
